Modifier(수정자)의 개념

Modifier은 안드로이드에서 Composable의 장식을 강화할 수 있는 도구로,

Modifier(수정자)로 가능한 것들

  • 크기/레이아웃/모양 변경 : size, padding, fillMaxWidth, clip, border
  • 접근성/의미 정보 추가 : 접근성 라벨, 테스트 태크
  • 사용자 입력 처리 : 터치/제스처 처리
  • 고수준 상호작용 추가 : clickable, scrollable, draggle, 확대/축소 등

Modifier 사용 예시

@Composable
private fun Greeting(name: String) {
	Column(modifier = modifier.padding(24.dp)) {
		Text(text = "Hello, ")
		Text(text = name)
	} 
}
@Composable
private fun Greeting(name: String) {
	Column(
		modifier = Modifier
			.padding(24.dp)
			.fillMaxWidth()
	) {
		Text(text = "Hello ,")
		Text(text = name)
	}
}
  • padding : 요소 주위에 공간을 배치합니다.
  • fillMaxWidth : 컴포저블이 상위 요소로부터 부여받은 최대 너비를 채우도록 한다.

수정자의 순서가 중요

modifier 함수의 순서는 다른 함수간의 영향을 준다.

이전 함수에서 반환한 Modifier 를 변경하므로 순서는 최종 결과에 영향을 준다.

@Composable
fun ArtistCard(/*...*/) {
	val padding = 16.dp
	Column(
		Modifier
			.clickable(onClick = onClick)
			.padding(padding)
			.fillMaxWith()
	) {
		
	}
}

위 코드에서 padding 수정자가 clickable 수정자 뒤에 적용되어 있으므로, 주변 패딩을 포함해 전체 영역을 클릭할 수 있다.

@Composable
fun ArtistCard(/**/) {
	val padding = 16.dp
	Column(
		Modifier
			.padding(padding)
			.clickable(onClick = onClick)
			.fillMaxWidth()
	) {
		// rest of the implementation
	}
}

내장 수정자

paddingsize

@Composable
fun ArtistCard(/**/){
	Row(
		modifier = Modifier.size(width = 400.dp, height = 100.dp)
	) {
		Image(/*...*/)
		Column(/*...*/)
	}
}

컴포저블의 크기를 고정해야 하는 경우 requiredSize 수정자를 사용하여 컴포저블의 크기를 고정할 수 있다.

@Composable
fun ArtistCard() {
	Row(
		modifier = Modifier.size(width = 400.dp, height = 100.dp)
	) {
		Image(
			/*...*/
			modifier = Modifier.requiredSize(150.dp)
		)
		Column {/*...*/}
	}
}

상위 요소가 height100.dp 로 설정되더라도 Image 높이는 150.dp가 된다. requiredSize 수정자가 우선하기 때문이다.